package day29;

// 找假币！！

// 参考2：通过！！
// 同样是分三份，但是直接向上取整就行！！【拿到最大/最坏情况】

import java.util.Scanner;
public class Main2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()){
            int n = sc.nextInt();
            if(n == 0) {
                break;
            }

            int count = 0; // n==1也是0

            while (n >= 2){
                //Math.ceil向上取整,但是是double类型
                // 同样是分三份，直接向上取整就得到最大的需要在称的那份【只有>=2才称】
                n = (int)Math.ceil((double)n/3.0);
                count++;
            }

            System.out.println(count);
        }
    }
}



/* 错误@！！！

// 找假币：假币比真币轻 【最多几次找到假币】
// 最坏情况就是：每次平均分，其中某一堆有假币，然后继续平均分，直到最后每堆只有1

import java.util.Scanner;

public class Main2 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            int n = in.nextInt();
            findFake(n);
        }
    }

    private static void findFake(int n) {
        if (n == 0) {
            return;
        }
        int fake = 0;
        while (n/2 != 0) {
            fake++;
            n /= 2;
        }
        System.out.println(fake);
    }
}
*/


// 参考代码：
// 每次三分：称了之后就可以知道哪堆中是有假币，再处理最后一堆就行
// 于要称量的硬币，每次称量前分成3份，要求前两份的个数不小于第三份


/* 错错错！！
import java.util.Scanner;

public class Main2 {

    public static int findCoin(int n){
        if(n==1)
            return 0;
        if(n<=3)
            return 1;
        // 来到这儿，说明1次已经有保障，另外的就看分到的堆的情况了--递归

        int front,rest,times=0;
        // 3等分前，先加2，使得front[前两份]的值尽量大于rest!!!
        // (front,front,rest)
        front = (n+2)/3;
        rest = n-2*front;

        times= 1 + findCoin(Math.max(front, rest)); //最坏就是取最大再进行递归！
        return times;
    }
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            int n = in.nextInt();
            int ret = findCoin(n);
            System.out.println(ret);
        }
    }
}*/







